package com.yu.util;

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 类名：TimeUtil.java 类描述：时间处理工具
 * 
 * @author wader 创建时间：2011-12-02 11:03
 */
public class TimeUtil
{
    private TimeUtil()
    {
        
    }
    
    /**
     * 以格式format返回表示日期时间的字符串
     * 
     * @param format
     * @return
     */
    public static String getDateTimeStr(String format)
    {
        Date date = new Date();
        Format formatter = new SimpleDateFormat(format);
        return formatter.format(date);
    }
    
    /**
     * 取得当前日期时间
     * 
     * @return
     */
    public static String getCurrDateTime()
    {
        return getDateTimeStr("yyyy-MM-dd HH:mm:ss");
    }
    
    /**
     * 取得当前日期,不足两位前补零
     * 
     * @return
     */
    public static String getCurrDate()
    {
        return getDateTimeStr("yyyy-MM-dd");
    }
    
    /**
     * 取得当前日期,不足两位前补零
     * 
     * @return
     */
    public static String getCurrMinDate()
    {
        return getDateTimeStr("yyMMddHHmm");
    }
    
    /**
     * 取得当前日期
     * 
     * @return
     */
    public static String getSimpleCurrDate()
    {
        return getDateTimeStr("yyyy-M-d");
    }
    
    /**
     * 取得当前时间
     * 
     * @return
     */
    public static String getCurrTime()
    {
        return getDateTimeStr("HH:mm:ss");
    }
    
    /**
     * 取得当前年月
     * 
     * @return
     */
    public static String getCurrYearMonth()
    {
        return getDateTimeStr("yyyy-MM");
    }
    
    /**
     * 从文本形式日期取得Date日期时间
     * 
     * @param strMonth
     * @return
     */
    public static Date getDate(String strMonth)
    {
        SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
        
        try
        {
            java.util.Date date = myFormatter.parse(strMonth);
            return date;
        }
        catch (Exception ex)
        {
            return null;
        }
    }
    
    public static Date getCurDate()
    {
        return new Date();
    }
    
    /**
     * 从文本形式日期取得Date日期时间
     * 
     * @param strMonth
     * @return
     */
    public static Date getDateTime(String strMonth)
    {
        SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-ddHH:mm");
        
        try
        {
            java.util.Date date = myFormatter.parse(strMonth);
            return date;
        }
        catch (Exception ex)
        {
            return null;
        }
    }
    
    /**
     * 得到两个文本日期之间的天数
     * 
     * @param startDate
     * @param endDate
     * @return
     */
    public static long getDaysBetween(String startDate, String endDate)
    {
        Date dStart = getDate(startDate);
        Date dEnd = getDate(endDate);
        
        return (dEnd.getTime() - dStart.getTime()) / (24 * 60 * 60 * 1000);
    }
    
    /**
     * 得到两个文本时间段的小时数
     * 
     * @param startDate
     * @param endDate
     * @return
     */
    public static double getHoursBetween(String startTime, String endTime)
    {
        startTime = getCurrDate() + startTime;
        endTime = getCurrDate() + endTime;
        Date tStart = getDateTime(startTime);
        Date tEnd = getDateTime(endTime);
        double timeTemp = (tEnd.getTime() - tStart.getTime());
        
        return (Math.round(timeTemp / (60 * 60 * 1000) * 100) / 100.0);
    }
    
    /**
     * 取某月的天数,strMonth的格式是"yyyy.MM"
     * 
     * @param strMonth
     * @return
     */
    public static int getDaysInAMonth(String strMonth)
    {
        String[] arr = strMonth.split("[-]");
        
        // Create a calendar object of the desired month
        Calendar cal = new GregorianCalendar(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]) - 1, 1);
        
        // Get the number of days in that month
        int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        
        return days;
    }
    
    /**
     * 取某月第一天是周几,strMonth的格式是"yyyy-MM"
     * 
     * @param strMonth
     * @return
     */
    public static int getWeekOfFirstDay(String strMonth)
    {
        String[] arr = strMonth.split("[-]");
        
        Calendar xmas = new GregorianCalendar(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]) - 1, 1);
        int dayOfWeek = xmas.get(Calendar.DAY_OF_WEEK) - 1;
        return dayOfWeek;
    }
    
    public static void main(String[] args)
    {
        System.out.println("当前日期时间为:" + getCurrMinDate());
       
    }
}
